Antes do C++11, o padrão do C++ era "indiferente a threads," baseado em APIs específicas da plataforma, como as Threads POSIX (Pthreads) ou Win32. O C++ moderno revolucionou a linguagem ao introduzir um Modelo de Memória e uma API de concorrência padronizada.
1. A "Mudança Radical" do C++11
O C++11 transformou a linguagem de uma máquina abstrata monofásica para uma que entende nativamente a execução concorrente por meio do <thread> cabeçalho e std::thread. Isso transferiu a concorrência de uma preocupação de biblioteca externa para o sistema de tipos principal.
2. Garantias de Exceção
O noexcept especificador é crítico em contextos concorrentes. Ele fornece um contrato de que uma função (como o ponto de entrada de uma thread) não propagará exceções. Se uma exceção escapar de um noexcept limite, std::terminate() é chamado imediatamente, impedindo a corrupção de estado indefinido.
3. Tipos de Dados Consistentes
A padronização incluiu tipos como long long int (adotado do C99) e std::filesystem, garantindo que larguras de dados e interações com o sistema permaneçam consistentes entre diferentes hardware quando compartilhadas entre threads.